package com.shoe.service.impl;


import com.shoe.mapper.CommentRepository;
import com.shoe.pojo.ShoeEvaluate;
import com.shoe.vo.ResponseResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Service;


@Service
public class CommentService {

    @Autowired
    private CommentRepository commentRepository;
    @Autowired
    private MongoTemplate mongoTemplate;

    /**
     * 保存一个评论
     */
    public void saveComment(ShoeEvaluate shoeEvaluate){
        //如果需要自定义主键，可以在这里指定主键；如果不指定主键，MongoDB会自动生成主键
        //设置一些默认初始值。。。
        //调用dao
        commentRepository.save(shoeEvaluate);
    }

    /**
     * 更新评论
     */
    public void updateComment(ShoeEvaluate shoeEvaluate){
        //调用dao
        commentRepository.save(shoeEvaluate);
    }

    /**
     * 根据id删除评论
     * @param id
     */
    public void deleteCommentById(String id){
        //调用dao
        commentRepository.deleteById(id);
    }

    /**
     * 查询所有评论
     * @return
     */
    public ResponseResult findCommentList(int page, int size){
        //调用dao
        ResponseResult responseResult =new ResponseResult();
        responseResult.setData(commentRepository.findAll(PageRequest.of(page-1,size)));
        return responseResult;
    }

    /**
     * 根据id查询评论
     * @param id
     * @return
     */
    public ShoeEvaluate findCommentById(String id){
        //调用dao
        return commentRepository.findById(id).get();
    }


    public Page<ShoeEvaluate> findCommentListByParentid(String parentid, int page, int size) {
        //在执行查询方法时，可以传入一个PageRequest对象，代表进行分页查询。
        //PageRequest对象代表了查询的条件和约束，通常包含当前页数，每页几条数据。
        //也可以在分页查询时指定Direction或Sort。
        return commentRepository.findByParentid(parentid,PageRequest.of(page-1,size));
    }

    public void updateCommentLikenum(String id){

        //  查询条件
        Query query = Query.query(Criteria.where("_id").is(id));
        //  更新条件
        Update update = new Update();
        update.inc("likenum");
        mongoTemplate.updateFirst(query,update,ShoeEvaluate.class);
    }
}
